package org.zpmis.domain.file.service.impl;


import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.zpmis.domain.file.service.FileService;
import org.zpmis.util.MinioUtil;
import org.zpmis.utils.ByteToInputStreamUtil;

import java.io.InputStream;

/**
 * dubbo 对内部服务提供支持
 */
@Service
@Component
public class FileServiceImpl implements FileService {

    @Autowired
    MinioUtil minioUtil;

    /**
     * 创建桶
     * @param bucketName 桶名称
     */
    @Override
    public void createBucket(String bucketName) throws Exception {
        minioUtil.createBucket(bucketName);
    }
    /**
     * 上传文件
     * @param bucketName 桶名
     * @param fileName 文件名
     * @param contentType
     * @param filePath 文件全路径
     * @return 文件名称
     * @throws Exception
     */
    @Override
    public String uploadObject(String bucketName, String fileName, String filePath, String contentType) throws Exception {
        return minioUtil.uploadObject(bucketName,fileName,filePath,contentType);
    }
    /**
     * 上传文件
     * @param bucketName 桶名
     * @param fileName 文件名
     * @param bytes 文件字节
     * @param contentType
     * @return 文件名
     * @throws Exception
     */
    @Override
    public String uploadStream(String bucketName, String fileName, byte[] bytes, String contentType) throws Exception {
        InputStream inputStream = ByteToInputStreamUtil.byte2Input(bytes);
        return minioUtil.uploadStream(bucketName,fileName,inputStream,contentType);
    }


    /**
     * 下载文件
     * @param fileName 文件名
     * @param downloadFilePath 下载的文件全路径
     * @param bucketName 桶名
     */
    @Override
    public void download(String fileName, String downloadFilePath, String bucketName) throws Exception {
        minioUtil.download(fileName,downloadFilePath,bucketName);
    }
    /**
     * 获取文件流
     * @param fileName 文件名
     * @param bucketName 桶名
     * @return
     */
    @Override
    public byte[] get(String fileName, String bucketName) throws Exception {
        InputStream inputStream = minioUtil.get(fileName, bucketName);
        return ByteToInputStreamUtil.input2byte(inputStream);
    }

    /**
     * 去默认桶中获取文件字节
     * @param fileName 文件名
     * @return
     */
    @Override
    public byte[] getFileBytes(String fileName) throws Exception {
        InputStream inputStream = minioUtil.get(fileName, MinioUtil.DEFAUT_BUCKET);
        return ByteToInputStreamUtil.input2byte(inputStream);
    }
    /**
     * 删除文件
     * @param fileName 文件名
     * @param bucketName 桶名
     * @throws Exception
     */
    @Override
    public void remove(String fileName, String bucketName) throws Exception {
        minioUtil.remove(fileName,bucketName);
    }
}
